;========= CONFIGURABLE TEMPERATURE PARAMETERS =========
var bedTargetTemp = 150      ; Default target bed temperature for PID tuning (°C)

; ---- User confirmation and temperature selection ----
M291 S4 K{"Start with 150°C","Custom temperature","Cancel"} R"Bed Heater PID Tuning" P"Do not leave printer unattended."

if input == 0
  ; Use default temperature (150°C)
  echo "Starting bed PID tuning at default temperature: " ^ var.bedTargetTemp ^ "°C"
elif input == 1
  ; Ask for custom temperature
  M291 J1 L120 H200 F{var.bedTargetTemp} P"Enter target bed temperature (120-200°C)" R"Custom PID Temperature" S5
  set var.bedTargetTemp = input
  echo "Starting bed PID tuning at custom temperature: " ^ var.bedTargetTemp ^ "°C"
else
  abort "PID tuning cancelled by user."



; Disable Fans
M106 P3 S0
M106 P1 S0

;Cool Down Tools
M568 P0 S0 R0
M568 P1 S0 R0
M568 P2 S0 R0
M568 P3 S0 R0



; Only wait for bed to cool down if target is 140°C or below (no chamber pre-heat)
if var.bedTargetTemp <= 140
    if heat.heaters[2].current > 50
        M291 R"Wait for Heater to Cool Down" P"All heater temperatures were set to 0°C." S1 T10
        while heat.heaters[2].current > 50
            G4 S5


M98 P"0:/sys/led/dimmwhite.g"
M98 P"0:/sys/led/pause.g"

; If bed target is above 140°C, pre-heat chamber to 100°C and wait for 60°C
if var.bedTargetTemp > 140
    echo "Bed target above 140°C - heating chamber to 100°C before PID tuning"
    M141 S100
    M291 R"Chamber Pre-Heat" P"Chamber heating to 100°C. Waiting for 60°C before starting PID tuning." S1 T10
    while heat.heaters[3].current < 60
        G4 S5
    echo "Chamber reached " ^ heat.heaters[3].current ^ "°C - proceeding with PID tuning"

; Validate chamber air temperature before tuning
var ambient = heat.heaters[3].current
if var.ambient < 10 || var.ambient > 100
    M98 P"0:/sys/led/fault.g"
    M291 R"Chamber Temperature Out of Range" P{"Chamber air temperature "^var.ambient^"°C is outside 10-100°C. Adjust the chamber and rerun PID tuning."} S1
    abort "Error: Chamber air temperature is not within range to start."

M303 H2 S{var.bedTargetTemp} A{var.ambient} Q1
if result != 0
    M98 P"0:/sys/led/fault.g"
    M291 R"PID Tune Failed" P"PID tuning did not complete. Review heater status and retry." S1
    abort "Error: PID tuning has failed."
    M99

while heat.heaters[2].state = "tuning"
        G4 S10

M98 P"0:/sys/led/end.g"

var rr = heat.heaters[2].model.heatingRate
var kk1 = heat.heaters[2].model.coolingRate
var kk2 = heat.heaters[2].model.fanCoolingRate
var dd = heat.heaters[2].model.deadTime
var ee = heat.heaters[2].model.coolingExp
var vv = heat.heaters[2].model.standardVoltage

echo >"0:/user/PIDBedHead.g" "M307 H2 R"^{var.rr}^" K"^{var.kk1}^":"^{var.kk2}^" D"^{var.dd}^" E"^{var.ee}^" S1.00 B0"


M141 S0
echo "Chamber heater turned off after PID tuning"

M291 R"PID Tune Complete" P"Bed PID values have been saved." S1